mov_dssi_to_cache_area macro
; 设置ds:si为缓存区地址
    push ax
    mov ax,cache_area
    mov ds,ax
    lea si,cache_area_start
    pop ax
endm

;================================================================
mov_esdi_to_cache_area macro
; 设置ds:si为缓存区地址
    push ax
    mov ax,cache_area
    mov es,ax
    lea di,cache_area_start
    pop ax
endm

;================================================================
mov_dssi_to_cache_area2 macro
; 设置ds:si为缓存区2地址
    push ax
    mov ax,cache_area2
    mov ds,ax
    lea si,cache_area_start2
    pop ax
endm

;================================================================
mov_esdi_to_cache_area2 macro
; 设置ds:si为缓存区2地址
    push ax
    mov ax,cache_area2
    mov es,ax
    lea di,cache_area_start2
    pop ax
endm




;================================================================

copy_from_es_to_ds macro times
; 从ex复制数据到ds times次
    push cx
    pushf
    mov cx,times
    cld
    rep movsb
    popf
    pop cx
endm
;================================================================



clear_area_data SEGMENT
    _1 dw 1
    _2 dw 2
    _3 dw 3
    _8 dw 8
    _12 dw 12
    _16 dw 16
    _24 dw 24
    _48 dw 48
    _80 dw 80
clear_area_data ends
;================================================================

clear_area_ds macro sizes
local clear_area_ds_cycle
; 从ds:si开始向后清理size大小的数据
    push cx
    push ax
    push si 
    push ds


    mov ax,clear_area_data
    mov ds,ax
    lea si,sizes
    mov cx,ds:[si]

    pop ax
    mov ds,ax
    pop si
    push si
    
    xor ax,ax
clear_area_ds_cycle:
    mov ds:[si],al
    inc si
    loop clear_area_ds_cycle

    pop si
    pop ax
    pop cx

endm

;================================================================

clear_area_es macro sizes
local clear_area_es_cycle
; 从es:di开始向后清理size大小的数据
    push cx
    push ax
    push di 
    push es


    mov ax,clear_area_data
    mov es,ax
    lea di,sizes
    mov cx,es:[di]

    pop ax
    mov es,ax
    pop di

    xor ax,ax
clear_area_es_cycle:
    mov es:[di],al
    inc di
    loop clear_area_es_cycle

    
    pop ax
    pop cx

endm


